#include"include/hashStack.h"



#include <assert.h>
#include <mysql/mysql.h>

/*
int main() {
    // 创建哈希栈
    hashStack_t myStack;
    MYSQL *db = InitDb("localhost", "root", "123", "wangpan");
    assert(hashStack_init(&myStack, 5) == 0); // 使用较小的哈希表大小
    
    user_t user;
    
    // 测试1: 获取一个不存在的key（桶为空）
    int key1 = 3;
    _dirStack_t *stack1 = hashStack_get(&myStack, key1, db, &user);
    assert(stack1 != NULL);
    
    // 验证对应的哈希节点
    int hash_index1 = hash(key1, 5);
    hashNode_t *node1 = myStack.hash_map[hash_index1];
    assert(node1 != NULL);
    assert(node1->key == key1); // 检查哈希节点中的键
    assert(node1->dirStack == stack1); // 检查指向的目录栈
    
    // 测试2: 获取同一个key，应该返回相同的栈
    _dirStack_t *stack2 = hashStack_get(&myStack, key1, db, &user);
    assert(stack1 == stack2);
    assert(node1->dirStack == stack2); // 仍然是同一个节点
    
    // 测试3: 获取不同的key（相同桶）
    int key2 = 8; // 8 % 5 = 3
    _dirStack_t *stack3 = hashStack_get(&myStack, key2, db, &user);
    assert(stack3 != NULL);
    assert(stack3 != stack1);
    
    // 验证节点链表
    assert(node1->next != NULL); // 现在应该有下一个节点
    assert(node1->next->key == key2);
    assert(node1->next->dirStack == stack3);
    
    // 测试4: 获取另一个不同的key（相同桶）
    int key3 = 13; // 13 % 5 = 3
    _dirStack_t *stack4 = hashStack_get(&myStack, key3, db, &user);
    assert(stack4 != NULL);
    assert(stack4 != stack1);
    assert(stack4 != stack3);
    
    // 验证节点链表
    assert(node1->next->next != NULL);
    assert(node1->next->next->key == key3);
    assert(node1->next->next->dirStack == stack4);
    
    // 测试5: 获取不同桶的key
    int key4 = 2; // 2 % 5 = 2
    _dirStack_t *stack5 = hashStack_get(&myStack, key4, db, &user);
    assert(stack5 != NULL);
    
    // 验证不同桶的节点
    int hash_index2 = hash(key4, 5);
    hashNode_t *node2 = myStack.hash_map[hash_index2];
    assert(node2 != NULL);
    assert(node2->key == key4);
    assert(node2->dirStack == stack5);
    
    // 验证链表长度
    hashNode_t *cur = myStack.hash_map[hash_index1];
    int count = 0;
    while (cur) {
        count++;
        printf("节点 %d: key=%d, dirStack=%p\n", count, cur->key, cur->dirStack);
        cur = cur->next;
    }
    assert(count == 3); // 3,8,13 都在同一个桶中
    
    // 测试6: 尝试获取没有桶的键（应创建新桶）
    int key5 = 7; // 7 % 5 = 2
    _dirStack_t *stack6 = hashStack_get(&myStack, key5, db, &user);
    assert(stack6 != NULL);
    assert(stack6 != stack5);
    
    // 验证桶2的链表
    assert(node2->next != NULL);
    assert(node2->next->key == key5);
    assert(node2->next->dirStack == stack6);
    
    printf("所有测试通过!\n");
    // 清理资源
    // 注意：实际项目中需要添加清理代码释放分配的内存
    return 0;
}*/






